#include "YXBase64.h"
#include "../../include/l8w8jwt/base64.h"
#include "../../include/l8w8jwt/retcodes.h"

#include <stdint.h>
#include <stdlib.h>
#include <string.h>

char *yx_base64_decode(const char *input, int input_len) {

    size_t output_len = input_len * 3 / 4 + 4;

    // 分配缓冲区以存放解码后的数据
    uint8_t *decoded_buffer = (uint8_t *) malloc(output_len);
    if (decoded_buffer == NULL) {
        return NULL;
    }

    // 解码 Base64 编码的字符串
    int result = l8w8jwt_base64_decode(
            0,
            input,           // Base64 编码的输入字符串
            input_len,       // 输入字符串的长度
            &decoded_buffer, // 解码缓冲区
            &output_len      // 解码缓冲区的大小// 解码后写入的字节数
        );
    if (result != L8W8JWT_SUCCESS) {
        return NULL;
    }
    return (char*) decoded_buffer;
}

void yx_base64_free(char *str) {
    free(str);
}
